package com.woniu;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

public class Demo6 {

    // 1、（面试题）什么是原子计数器？ 它能解决什么问题？

    public static void main(String[] args) {

        // 多线程计数的问题 ， 多个线程访问同一个资源，然后i++到100

        Runnable r = new Runnable() {
            // 原子计算器是一个对象在java.util.concurrent
            private AtomicInteger atomic = new AtomicInteger(0);
            @Override
            public void run() {
                while(atomic.get() < 100) {
                    int i = atomic.incrementAndGet(); // 具有原子性把i++的3个操作进行了加锁
                    System.out.println(i);
                }
            }
        };
        // 理想情况：正常从0到100
        // 不是理想情况：可能会出现结果不正确
        // 问题：为什么会出现重复打印？
        // 因为多线程：第一个线程进去后，第二个线程也进去了，主要是因为没有加锁
        //  i++这个代码造成的
        new Thread(r).start();
        new Thread(r).start();

    }
}
